import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 部门管理 / 部门管理添加
 * @param {object} data
 * @param {string} [data.code] 部门编码
 * @param {string} [data.contactPerson] 联系人
 * @param {string} [data.contactPhone] 联系电话
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.creator] 创建人
 * @param {boolean} [data.delFlag] 删除标识(false:否, true:是)
 * @param {string} [data.description] 描述说明
 * @param {number} [data.id] id
 * @param {string} [data.lastModifiedBy] 最后一次修改人
 * @param {string} [data.lastModifiedTime] 最后一次修改时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.name] 部门名称
 * @param {number} [data.parentId] 上级部门id
 * @param {number} [data.serial] 序号
 * @param {string} [data.status] 启用禁用标识 可选值: DISABLE, ENABLE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Department页面展示实体>}
 * @author 安奇
 */
export function systemDepartmentAdd(data, config) {
  return post("/system/department/add", data, config);
}

/**
 * 部门管理 / 部门管理删除
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 安奇
 */
export function systemDepartmentDelete(params, data, config) {
  return postWithQueryParams("/system/department/delete", params, data, config);
}

/**
 * 部门管理 / 部门管理查询详情
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Department页面展示实体>}
 * @author 安奇
 */
export function systemDepartmentDetail(params, config) {
  return get("/system/department/detail", params, config);
}

/**
 * 部门管理 / 部门管理查询子节点
 * @param {object} params
 * @param {number} params.parentId parentId
 * @param {boolean} [params.showDisabled] 是否显示禁用部门
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Department页面展示实体>>}
 * @author 安奇
 */
export function systemDepartmentGetChildrenNodes(params, config) {
  return get("/system/department/getChildrenNodes", params, config);
}

/**
 * 部门管理 / 部门管理查询子部门用户
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<User页面展示实体>>}
 * @author 陈凯
 */
export function systemDepartmentGetChildrenUsers(params, config) {
  return get("/system/department/getChildrenUsers", params, config);
}

/**
 * 部门管理 / 部门管理分页查询
 * @param {object} data
 * @param {string} [data.code] 部门编码
 * @param {string} [data.contactPerson] 联系人
 * @param {string} [data.contactPhone] 联系电话
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.creator] 创建人
 * @param {boolean} [data.delFlag] 删除标识(false:否, true:是)
 * @param {string} [data.description] 描述说明
 * @param {number} [data.id] id
 * @param {string} [data.lastModifiedBy] 最后一次修改人
 * @param {string} [data.lastModifiedTime] 最后一次修改时间 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.length] 分页大小
 * @param {string} [data.name] 部门名称
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {number} [data.parentId] 上级部门id
 * @param {number} [data.serial] 序号
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.status] 启用标识(0:否, 1:是) 可选值: DISABLE, ENABLE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<Department页面展示实体>>}
 * @author 安奇
 */
export function systemDepartmentList(data, config) {
  return post("/system/department/list", data, config);
}

/**
 * 部门管理 / 部门管理分页查询
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Department页面展示实体>>}
 * @author 安奇
 */
export function systemDepartmentListNoPage(config) {
  return get("/system/department/listNoPage", config);
}

/**
 * 部门管理 / 部门管理更新
 * @param {object} data
 * @param {string} [data.code] 部门编码
 * @param {string} [data.contactPerson] 联系人
 * @param {string} [data.contactPhone] 联系电话
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.creator] 创建人
 * @param {boolean} [data.delFlag] 删除标识(false:否, true:是)
 * @param {string} [data.description] 描述说明
 * @param {number} [data.id] 部门id
 * @param {string} [data.lastModifiedBy] 最后一次修改人
 * @param {string} [data.lastModifiedTime] 最后一次修改时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.name] 部门名称
 * @param {number} [data.parentId] 上级部门id
 * @param {number} [data.serial] 序号
 * @param {string} [data.status] 启用禁用标识 可选值: DISABLE, ENABLE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Department页面展示实体>}
 * @author 安奇
 */
export function systemDepartmentUpdate(data, config) {
  return post("/system/department/update", data, config);
}

/**
 * 部门管理 / 部门管理设置部门启用禁用状态
 * @param {object} data
 * @param {number} [data.id] 部门id
 * @param {string} [data.status] 启用状态 可选值: DISABLE, ENABLE
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 安奇
 */
export function systemDepartmentUpdateDepartmentStatus(data, config) {
  return post("/system/department/updateDepartmentStatus", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} Department页面展示实体 页面展示实体
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} code 部门编码
 * @property {string} contactPerson 联系人
 * @property {string} contactPhone 联系电话
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建人用户名
 * @property {string} createUserDeptName 创建人所属部门
 * @property {string} createUserRealName 创建人真实姓名
 * @property {string} creator 创建人
 * @property {string} description 描述说明
 * @property {number} id
 * @property {boolean} isHaveChildNote 是否有子节点
 * @property {string} lastModifiedBy 最后一次修改人
 * @property {string} lastModifiedTime 最后一次修改时间
 * @property {string} name 部门名称
 * @property {number} parentId 上级部门id
 * @property {string} parentName 父级部门名称
 * @property {number} serial 序号
 * @property {string} status 启用禁用状态 可选值: DISABLE, ENABLE
 * @description 页面展示实体
 */

/**
 * @typedef {object} User页面展示实体 页面展示实体
 * @property {string} address 通讯地址
 * @property {string} birthday 生日
 * @property {string} cardNum 证件号码
 * @property {string} cardType 证件类型 可选值: ID_CARD, PASS_PORT
 * @property {string} createUser 创建用户
 * @property {string} created 创建时间
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {string} departId 部门ID
 * @property {string} duties 职务
 * @property {string} email 信箱
 * @property {number} enabled 启用状态（1已启用，0已禁用）
 * @property {string} gender 性别
 * @property {string} id 用户ID
 * @property {boolean} is_internal 0非内置用户；1内置用户
 * @property {string} jobNumber 工号
 * @property {string} landlineNumber 座机号码
 * @property {string} lastLoginTime 最后一次登录时间
 * @property {string} lastPasswordUpdateTime 最后一次密码修改时间
 * @property {string} notes 备注
 * @property {string} parentTenantId 所属父租户ID
 * @property {boolean} passwordExpired 密码是否过期（1已过期，0未过期）
 * @property {string} pic 照片
 * @property {string} realName 用户姓名
 * @property {string} telephone 手机号
 * @property {string} tenantId 所属租户ID
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} userType 用户类型(tenant、system)
 * @property {string} username 用户账号
 * @description 页面展示实体
 */
